package com.iflytek.aidemo.util;

import android.content.Context;
import android.content.SharedPreferences;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

public class SpUtil {
    private static final String DEFAULT_NAME = "app_config";
    private static SharedPreferences sPreferences;
    private static SharedPreferences.Editor sEditor;

    /**
     * 初始化工具类，建议在 Application 中调用
     */
    public static void init(@NonNull Context context) {
        init(context, DEFAULT_NAME);
    }

    /**
     * 带自定义文件名的初始化方法
     */
    public static void init(@NonNull Context context, @NonNull String name) {
        sPreferences = context.getSharedPreferences(name, Context.MODE_PRIVATE);
        sEditor = sPreferences.edit();
    }

    /**
     * 存储字符串类型数据
     */
    public static void put(@NonNull String key, @Nullable String value) {
        sEditor.putString(key, value).apply();
    }

    /**
     * 获取字符串类型数据，带默认值
     */
    @NonNull
    public static String get(@NonNull String key, @NonNull String defaultValue) {
        return sPreferences.getString(key, defaultValue);
    }

    // 其他基本数据类型的 put 和 get 方法
    public static void put(@NonNull String key, int value) {
        sEditor.putInt(key, value).apply();
    }

    public static int get(@NonNull String key, int defaultValue) {
        return sPreferences.getInt(key, defaultValue);
    }

    // 布尔类型
    public static void put(@NonNull String key, boolean value) {
        sEditor.putBoolean(key, value).apply();
    }

    public static boolean get(@NonNull String key, boolean defaultValue) {
        return sPreferences.getBoolean(key, defaultValue);
    }

    // 浮点类型
    public static void put(@NonNull String key, float value) {
        sEditor.putFloat(key, value).apply();
    }

    public static float get(@NonNull String key, float defaultValue) {
        return sPreferences.getFloat(key, defaultValue);
    }

    // 长整型
    public static void put(@NonNull String key, long value) {
        sEditor.putLong(key, value).apply();
    }

    public static long get(@NonNull String key, long defaultValue) {
        return sPreferences.getLong(key, defaultValue);
    }

    /**
     * 移除指定键值对
     */
    public static void remove(@NonNull String key) {
        sEditor.remove(key).apply();
    }

    /**
     * 清空所有数据
     */
    public static void clear() {
        sEditor.clear().apply();
    }
}
